<?php

/*
 * To change this template."<br>";choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of DAOUsuario
 *
 * @author Pesquisa
 */
require_once 'Banco.php';
require_once 'DAOBairro.php';
require_once 'DAOCidade.php';
require_once 'DAOEndereco.php';
require_once 'DAOPais.php';
require_once 'Model/Usuario.php';
require_once 'DAO/DAOLogin.php';

class DAOUsuario extends Banco{
     function DAOUsuario(){
        
    }
    
    function getUsuarios(){
        $usuarios = array();
        Banco::conecta();
        $banco = Banco::getBanco();
        //$lista = $banco->query("SELECT * FROM usuarios");
        $query = $banco->query("SELECT * FROM TB_USUARIO");
        if(!empty($query)){
            while ($usu = $query->fetch_assoc() ) {
                $usuario = new Usuario();
                $db = new DAOBairro();
                $dc = new DAOCidade();
                $de = new DAOEndereco();
                $dp = new DAOPais();
                $usuario->setCodigo($usu['USU_CODIGO']);
                $usuario->setNome($usu['USU_NOME']);
                $usuario->setSexo($usu['USU_SEXO']);
                $usuario->setCpf($usu['USU_CPF']);
                $usuario->setRg($usu['USU_RG']);
                $usuario->setDataNascimento($usu['USU_DATANASCIMENTO']);
                $usuario->setDataRegistro($usu['USU_DATAREGISTRO']);
                $usuario->setBairro($db->getBairro($usu['USU_CODBAIRRO']));
                $usuario->setCidade($dc->getCidade($usu['USU_CODCIDADE']));
                $usuario->setEndereco($de->getEndereco($usu['USU_CODENDERECO']));
                $usuario->setNumero($usu['USU_NUMERO']);
                $usuario->setEmail($usu['USU_EMAIL']);
                $usuario->setSenha($usu['USU_SENHA']);
                
                $usuarios[] = (object)$usuario;
            }
        }
        $banco->close();
        return $usuarios;
    }
    function getUsuario($id){
        $usuario = NULL;
        Banco::conecta();
        $banco = Banco::getBanco();
        if ($sql = $banco->prepare("SELECT USU_CODIGO, USU_NOME, USU_SEXO, USU_CPF, USU_RG, USU_NASCIMENTO, USU_DATA_REGISTRO, USU_CODENDERECO, USU_NUMERO, USU_CODBAIRRO, USU_CODCIDADE, USU_EMAIL, USU_SENHA FROM TB_USUARIO WHERE USU_CODIGO = ?")) {
            $sql->bind_param('i',$id);
            $sql->execute();
            $sql->bind_result($codigo, $nome, $sexo, $cpf, $rg, $nascimento, $registro, $endereco, $numero, $bairro, $cidade, $email, $senha);
            while ($sql->fetch()) {
                $usuario = new Usuario();
                $de = new DAOEndereco();
                $db = new DAOBairro();
                $dc = new DAOCidade();
                $usuario->setCodigo($codigo);
                $usuario->setNome($nome);
                $usuario->setSexo($sexo);
                $usuario->setCpf($cpf);
                $usuario->setRg($rg);
                $usuario->setDataNascimento($nascimento);
                $usuario->setDataRegistro($registro);
                $usuario->setEndereco($de->getEndereco($endereco));
                $usuario->setNumero($numero);
                $usuario->setBairro($db->getBairro($bairro));
                $usuario->setCidade($dc->getCidade($cidade));
                $usuario->setEmail($email);
                $usuario->setSenha($senha);
            }
            $sql->close();
        }
        $banco->close();
        return (object)$usuario;
    }
    
    function getUsuarioByLogin($login, $senha){
        $usuario = null;
        Banco::conecta();
        $banco = Banco::getBanco();
        if ($sql = $banco->prepare("SELECT USU_CODIGO, USU_NOME, USU_SEXO, USU_CPF, USU_RG, USU_NASCIMENTO, USU_DATA_REGISTRO, USU_CODENDERECO, USU_NUMERO, USU_CODBAIRRO, USU_CODCIDADE, USU_EMAIL, USU_SENHA FROM TB_USUARIO WHERE USU_EMAIL = ? AND USU_SENHA = ?")) {
            $sql->bind_param('ss',$login,$senha);
            $sql->execute();
            $sql->bind_result($codigo, $nome, $sexo, $cpf, $rg, $nascimento, $registro, $endereco, $numero, $bairro, $cidade, $email, $senha);
            while ($sql->fetch()) {
                $usuario = new Usuario();
                $de = new DAOEndereco();
                $db = new DAOBairro();
                $dc = new DAOCidade();
                $usuario->setCodigo($codigo);
                $usuario->setNome($nome);
                $usuario->setSexo($sexo);
                $usuario->setCpf($cpf);
                $usuario->setRg($rg);
                $usuario->setDataNascimento($nascimento);
                $usuario->setDataRegistro($registro);
                $usuario->setEndereco($de->getEndereco($endereco));
                $usuario->setNumero($numero);
                $usuario->setBairro($db->getBairro($bairro));
                $usuario->setCidade($dc->getCidade($cidade));
                $usuario->setEmail($email);
                $usuario->setSenha($senha);
            }
            $sql->close();
        }else{
            $banco->close();
            return null;
        }
        
        if(!is_a($usuario, 'Usuario')){
            return null;
        }
        $banco->close();
        return (object)$usuario;
    }
    
    function addUsuario(Usuario $usuario){
        $daoLogin = new DAOLogin();
        $alguem = $daoLogin->verificaUsuarioOrEmpresa($usuario->getEmail());
        if($alguem){
            return ERRO_CADASTRO-2;
        }
        Banco::conecta();
        $banco = Banco::getBanco();
        if(!is_a($usuario->getCidade(), 'Cidade')){
            $cidade = NULL;
        }else{
            $cidade = $usuario->getCidade()->getCodigo();
        }
        if(!is_a($usuario->getBairro(),'Bairro')){
            $bairro=NULL;
        }else{
            $usuario->getBairro()->getCodigo();
        }
        if(!is_a($usuario->getEndereco(), 'Endereco')){
            $endereco = NULL;
        }else{
            $endereco = $usuario->getEndereco()->getCodigo();
        }
        $nome=$usuario->getNome();
        $cpf=$usuario->getCpf();
        $rg=$usuario->getRg();
        $data=$usuario->getDataNascimento();
        $numero=$usuario->getNumero();
        $email=$usuario->getEmail();
        $senha=$usuario->getSenha();
        $sexo = $usuario->getSexo();
        if ($sql = $banco->prepare("INSERT INTO TB_USUARIO VALUES (default,?,?,?,?,?,NOW(),?,?,?,?,?,?);")) {
            $sql->bind_param('sssssisiiss',$nome, $sexo, $cpf, $rg, $data, $endereco, $numero, $bairro, $cidade, $email, $senha);
            $sql->execute();
            $usuario->setCodigo($sql->insert_id);
            $sql->close();
            $banco->close();
            return $usuario;
        }
        $banco->close();
        return false;
    }
    
    function updateUsuario(Usuario $usuario){
        Banco::conecta();
        $banco = Banco::getBanco();
        $codigo = $usuario->getCodigo();
        if(!is_a($usuario->getCidade(), 'Cidade')){
            $cidade = NULL;
        }else{
            $cidade = $usuario->getCidade()->getCodigo();
        }
        if(!is_a($usuario->getBairro(),'Bairro')){
            $bairro = NULL;
        }else{
            $bairro = $usuario->getBairro()->getCodigo();
        }
        if(!is_a($usuario->getEndereco(), 'Endereco')){
            $endereco = NULL;
        }else{
            $endereco = $usuario->getEndereco()->getCodigo();
        }
        $nome=$usuario->getNome();
        $cpf=$usuario->getCpf();
        $rg=$usuario->getRg();
        $data=$usuario->getDataNascimento();
        $numero=$usuario->getNumero();
        $email=$usuario->getEmail();
        $senha=$usuario->getSenha();
        $sexo=$usuario->getSexo();
        if ($sql = $banco->prepare("UPDATE TB_USUARIO SET USU_NOME = ?, USU_SEXO=?, USU_CPF = ?, USU_RG = ?, USU_NASCIMENTO = ?, USU_CODENDERECO = ?, USU_NUMERO = ?, USU_CODBAIRRO = ?, USU_CODCIDADE = ?, USU_EMAIL = ?, USU_SENHA = ? WHERE USU_CODIGO = ?")) {
            $sql->bind_param('sssssisiissi',$nome,$sexo, $cpf, $rg, $data, $endereco, $numero, $bairro, $cidade, $email, $senha, $codigo);
            $sql->execute();
            $sql->close();
        }
        $banco->close();
        return $usuario;
    }
}

?>
